package com.mk.admin.util;


import org.springframework.util.StringUtils;

/**
 * @author wenwu
 * @description: 错误码
 * @date 2021-04-27 16:10
 */
public enum Error {
    //网关错误码
    HEADER_MISSING_PARAMETER("A0000", "header缺少必要参数"),

    //admin错误码
    LOGIN_EXPIRED("E0000", "当前登录状态过期"),
    LOGIN_INFO_NOT_FOUND("E0001", "找不到当前登录的信息"),
    WRONG_CAPTCHA("E0002", "验证码错误"),
    CAPTCHA_ERROR_EXPIRED("E0003", "验证码不存在或已过期"),
    CAPTCHA_CONFIG_ERROR("E0004", "验证码配置信息错误！正确配置查看 LoginCodeEnum"),
    ACCOUNT_NOT_ACTIVATED("E0005", "账号未激活"),
    PERMISSION_DENIED("E0006", "权限不足"),
    PASSWORD_WRONG("E0007", "密码错误"),
    PASSWORD_SAME("E0008", "新密码与旧密码相同"),
    MODIFY_IS_NOT_YOURS("E0009", "不能修改他人信息"),
    ENTITY_EXIST("E0010", ""),
    ROLE_EXIST_USERS("E0011", "所选角色存在用户关联"),
    ENTITY_NOT_EXIST("E0012", ""),
    MENU_UPDATE_ERROR("E0013", "菜单上级不能为自己"),
    PATH_ERROR("E0014", "外链必须以http://或者https://开头"),
    WRONG_HOSPITAL("E0015", "选择的医院错误"),
    SELFPAYITEM_EMPTY("E0016", "自助缴费项目为空"),
    APPCONFIG_EMPTY("E0017", "获取应用配置为空"),
    DOWN_BILL_NEED_APP_ERROR("E0018", "请选择应用再下载账单"),
    //跨模块通用错误码
    SYSTEM_ERROR("100001", ""),
    ADD_ENTITY_ERROR("10001", "新增实体不能有id"),
    ADD_DATANULL_ERROR("10002", "新增实体传入实体对象为空"),
    ADD_SAVE_ERROR("10003", "新增失败"),
    ADD_UPDATE_ERROR("10004", "修改失败"),
    ADD_IMAGE_ERROR("10005", "只能上传图片"),
    ADD_UPLOAD_ERROR("10006", "上传失败"),
    ADD_DELETE_ERROR("10007", "删除失败"),
    ADD_DATANUll_ERROR("10008", "数据为空"),
    REQUEST_NOT_FROM_GATEWAY("10009", "请求不是来自网关"),
    REDIS_NOT_EXISTS_APPCONFIG("10010", "redis不存在appconfig配置"),
    APPCONFIG_NOT_EXISTS("10011", "appconfig不存在"),
    REDIS_NOT_EXISTS_HEALTHCARDCONFIG("10012", "redis不存在电子健康卡配置"),
    HEALTHCARDCONFIG_NOT_EXISTS("10013", "此电子健康卡配置不存在"),
    REDIS_NOT_SMS_APPCONFIG("10014", "redis不存在smsconfig配置"),
    REDIS_NOT_EMIAL_APPCONFIG("10015", "redis不存在邮件配置"),
    SMSCONFIG_NOT_EXISTS("10016", "smsconfig不存在"),
    REDIS_NOT_EXISTS_HOSPITALINFO("10017", "redis不存在hospitalInfo配置"),
    HOSPITALINFO_NOT_EXISTS("10018", "hospitalInfo不存在"),
    //退款失败
    REFUND_FAIL("10019", "退款失败"),
    /**
     * 已经启用的数据不能删除或者修改，请禁用在进行操作
     */
    DELETE_UPDATE_ERROR("10020", "已经启用的数据不能删除或者修改，请禁用在进行操作"),

    /**
     * 传入的参数为空，请检查！
     */
    DELETE_UPDATE_NOT_NULL_ERROR("10021", "传入的参数为空，请检查！"),

    BASE_ERROR("10022", "请求异常"),

    AL_ERROR("10022", "未查询到缴费记录"),

    MISS_PARAMS("10023", "缺少必要的参数"),
    MISS_DATE_PARAMS("10024", "缺少必要的时间参数"),
    //common错误码
    FILE_OUT_OF_SIZE("F0001", "文件超出规定大小"),
    MISSING_PARAMETER("F0002", "缺少参数"),
    REDIS_NOT_ONLINE("F0003", "redis服务不在线"),
    //his模块错误
    CREATE_HIS_CLIENT_ERROR("C0001", "创建调用his客户端失败"),
    CALL_HIS_SERVER_ERROR("C0002", "调用his服务报错"),
    HIS_RESPONSE_ERROR("C0003", ""),
    SERVICE_NOT_EXISTS("C0004", "未能获取到HIS业务实现类,请检查应用配置类his_service_name"),
    PARSE_TIME_ERROR("C0005", "解析时间错误"),
    REPEAT_APPOINTMENT("C0006", ""),
    //api模块
    CALL_HIS_MODULE_ERROR("B0001", "调用his服务模块报错"),
    CALL_HEATHCARD_MODULE_ERROR("B0002", "调用电子健康卡服务模块报错"),
    SIGN_ERROR("B0003", "签名错误"),
    PARSE_DATE_ERROR("B0004", "解析日期出错"),
    MONEY_ERROR("B0005", "下单金额与预算金额不一致"),
    BUDGET_NOT_EXISTS("B0006", "预算记录不存在"),
    CARD_OCCUPIED("B0007", "卡已被占用"),
    PAY_STATUS_ERROR("B0008", "支付状态错误,不能进行支付"),
    PAY_MONEY_ERROR("B0009", "支付金额与下单金额不一致"),
    PATIENT_NOT_EXISTS("B0010", "该患者不存在"),
    REGISTER_MONEY_ERROR("B0011", "金额与预算金额不一致"),
    HIS_PATIENT_NOT_EXISTS("B0012", "his返回不存在此病人信息"),
    HIS_RESPONSE_CARD_NOT_AGREEMENT("B0013", "绑卡失败：HIS返回卡号和身份证号与入参不一致"),
    //需要注册
    NEED_REGISTER("B0014", ""),
    UNSUPPORT_TRADE("B0015", "不支持的交易类型"),
    //
    PAY_ORDER_NOT_EXISTS("B0016", ""),
    //alipay模块
    ALI_API_ERROR("G0001", "调用阿里api报错"),
    ALI_RESPONSE_ERROR("G0002", "支付宝返回失败"),
    CREATE_ALIPAY_CLIENT_ERROR("G0003", "创建支付宝调用客户端报错"),

    //healthcard模块
    HEALTHCARD_NULL_ERROR("H0001", ""),
    HEALTHCARD_GETTOKEN_ERROR("H0002", "获取appToken异常"),
    HEALTHCARD_REGISTER_ERROR("H0003", "注册失败"),

    //message模块
    MESSAGE_SMS_ERROR("S0001", ""),
    MESSAGE_SENDSMS_ERROR("S0002", "发送短信失败"),
    NO_PHONE_PARAM("S0003", "发送的电话号码为空或者输入错误"),
    NO_MSG_CONTENT("S0004", "发送短信内容为空"),
    MESSAGE_ERROR("S0005", ""),

    //quartz模块
    QUARTZ_UPD_ERROR("Q0001", "更新定时任务失败"),
    QUARTZ_DEL_ERROR("Q0002", "删除定时任务失败"),
    QUARTZ_RVY_ERROR("Q0003", "恢复定时任务失败"),
    QUARTZ_IMT_ERROR("Q0004", "定时任务执行失败"),
    QUARTZ_SPD_ERROR("Q0005", "定时任务暂停失败"),
    QUARTZ_IST_ERROR("Q0006", "创建定时任务失败"),
    QUARTZ_CRON_ERROR("Q0007", "cron表达式格式错误"),
    QUARTZ_NOTADD_ERROR("Q0008", "子任务中不能添加当前任务ID"),
    QUARTZ_JSON_ERROR("Q0009", ""),

    /**
     * 医保模块,不支持交易
     */
    NO_SUPPORTED_MEDICAL("YB0001", "该医院不支持医保交易"),

    /**
     * 医保模块,传入的患者编码不能不空
     */
    NO_PATIENT_INFO("YB0002", "没有传入必要的参数-->患者编码patientId"),


    /**
     * 医保模块,查询的患者信息为空
     */
    PATIENT_INFO_ISNULL("YB0003", "查询的患者信息为空"),

    /**
     * 医保模块,该用户未绑定医保卡 Unbound medical insurance card
     */
    UNBOUND_MEDICAL_INSURANCE_CARD("YB0004", "该用户未绑定医保卡"),

    /**
     * 医保模块,未找到该用户有效的医保卡信息
     */
    NO_FIND_MEDICAL_CARD_INFO("YB0005", "未找到该用户有效的医保卡信息"),


    /**
     * 医保模块,未传入必要的参数身份证号码
     */
    NO_ID_CARD("YB0006", "未传入必要的参数身份证号码"),

    /**
     * 医保模块,未传入必要的参数患者姓名
     */
    NO_AUTH_NAME("YB0007", "未传入必要的参数患者姓名"),


    /**
     * 医保模块,未传入必要的参数患者电话号码
     */
    NO_AUTH_PHONE("YB0008", "未传入必要的参数患者电话号码"),

    /**
     * 医保模块,未传入必要的参数银行卡后6位
     */
    NO_AUTH_CARD_NO("YB0009", "未传入必要的参数银行卡后6位"),


    /**
     * 医保模块,未找到该用户有效的医保卡信息
     */
    AUTH_MEDICAL_EXCEPTION("YB0010", "医保认证异常"),

    /**
     * 医保模块,医保调用超时
     */
    COULD_NOT_RECEIVE_MESSAGE("YB0011", "医保调用超时"),

    /**
     * 医保模块,调用医保异常
     */
    CALL_MEDICAL_EXCEPTION("YB0012", "调用医保异常"),


    /**
     * 缺少体检成功后的体检编码healthNo
     */
    NO_HEALTH_NO_ERROR("TJ0001", "缺少体检成功后的体检编码healthNo"),


    /**
     * 缺少体检查看详情类型reportType
     */
    NO_HEALTH_REPORT_TYPE("TJ0002", "缺少体检查看详情类型reportType"),



    ;
    private String errCode;
    private String errMsg;

    public String getErrCode() {
        return errCode;
    }

    public void setErrCode(String errCode) {
        this.errCode = errCode;
    }

    public String getErrMsg() {
        return errMsg;
    }

    public void setErrMsg(String errMsg) {
        this.errMsg = errMsg;
    }

    public void setErrMsg(Class clazz, String field, String val) {
        this.errMsg = generateMessage(clazz.getSimpleName(), field, val);
    }

    Error(String errCode, String errMsg) {
        this.errCode = errCode;
        this.errMsg = errMsg;
    }

    private static String generateMessage(String entity, String field, String val) {
        return StringUtils.capitalize(entity)
                + " with " + field + " " + val + " existed";
    }


}
